2026-10-14T23:46:01.4130633Z ##[group]Run npm run test:deploy
2026-10-14T23:46:01.4130668Z [36;1mnpm run test:deploy[0m
2026-10-14T23:46:01.4130688Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:01.4130698Z env:
2026-10-14T23:46:01.4130705Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:01.4130717Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:01.4130724Z ##[endgroup]
2026-10-14T23:46:01.5256562Z 
2026-10-14T23:46:01.5256742Z > test:deploy
2026-10-14T23:46:01.5256780Z > node --test "scripts/deploy/*.test.mjs"
2026-10-14T23:46:01.5256821Z 
2026-10-14T23:46:01.6591958Z ✔ a release's version bump keeps the Rust caches' key, a new dependency changes it (3.684471ms)
2026-10-14T23:46:01.6598699Z ✔ the toolchain is read from rustc -V (0.283154ms)
2026-10-14T23:46:01.6601100Z ✔ the CLI's builder image is pinned, and keys its cache by its digest (0.264056ms)
2026-10-14T23:46:01.6603223Z ✔ a unit's hash is read from its files and folders (0.273431ms)
2026-10-14T23:46:01.6625291Z ✔ only the units the build did not use are pruned (3.463599ms)
2026-10-14T23:46:04.7318912Z error: no matching package named `base64` found
2026-10-14T23:46:04.9966888Z location searched: crates.io index
2026-10-14T23:46:04.9967049Z required by package `g1t-api v0.1.0 (/home/runner/work/repo/apps/api)`
2026-10-14T23:46:04.9967154Z note: offline mode (via `--offline`) can sometimes cause surprising resolution failures
2026-10-14T23:46:04.9967238Z help: if this error is too confusing you may wish to retry without `--offline`
2026-10-14T23:46:05.0718883Z ✔ the manifest matches every wrangler config in the repository (34.919972ms)
2026-10-14T23:46:05.0719035Z ✔ every wrangler.jsonc is found, and only checked-in ones (26.122965ms)
2026-10-14T23:46:05.0719128Z ✔ problems are found: an unlisted config, a later-stage binding, a wrong database, an unnamed KV (31.839377ms)
2026-10-14T23:46:05.0721223Z ✔ stages follow bindings: nothing binds to a unit that ships after it (0.570377ms)
2026-10-14T23:46:05.0728267Z ✔ inside a stage, a Worker that does not exist yet goes before those bound to it (0.989405ms)
2026-10-14T23:46:05.0739618Z ✔ Rust workers build with the shared script and the same wasm-opt level (0.688533ms)
2026-10-14T23:46:05.0740693Z ✔ shared crates and packages are read from workspace metadata (0.302254ms)
2026-10-14T23:46:05.0741655Z ✔ the runner's image is built from the runner crate and what it uses, on the base its lock names (0.36625ms)
2026-10-14T23:46:05.0743480Z ✔ services/runner/base.json records the base its folder builds (13.474308ms)
2026-10-14T23:46:05.0804720Z ✔ an image's hash ignores line endings, and its tags say what they are (129.699253ms)
2026-10-14T23:46:05.0804851Z ✔ only the lockfile entries the runner is built from name its image (0.467281ms)
2026-10-14T23:46:05.0804917Z ✔ the runner's deploy config names its image by reference, beside its wrangler.jsonc (24.107089ms)
2026-10-14T23:46:05.0805304Z ✔ the registry is asked for an image's manifest, without Docker (1.111618ms)
2026-10-14T23:46:05.0805362Z ✔ a push counts only when it ends with a digest, and is tried again (0.866731ms)
2026-10-14T23:46:05.0805412Z ✔ a static Linux binary is told from a dynamic one (1.003998ms)
2026-10-14T23:46:05.0805499Z ﹣ path dependencies agree with Cargo's own resolved graph (2200.237146ms) # cargo metadata could not resolve offline
2026-10-14T23:46:05.0805558Z ✔ every import that leaves a unit's folder is covered by its dependencies or inputs (78.074394ms)
2026-10-14T23:46:05.0805614Z ✔ a shared crate's change reaches every unit built from it, and no other (1.017508ms)
2026-10-14T23:46:05.0805663Z ✔ a shared package's change reaches what imports it (0.313731ms)
2026-10-14T23:46:05.0805710Z ✔ a crate's tests, benches and examples deploy nothing (0.507662ms)
2026-10-14T23:46:05.0805763Z ✔ a Rust file compiled only for tests is found from what declares it (1.462987ms)
2026-10-14T23:46:05.0805806Z ✔ this repository's test-only sources are read from git (239.469639ms)
2026-10-14T23:46:05.0805852Z ✔ decide: a change only to tests deploys nothing (1.374253ms)
2026-10-14T23:46:05.0805897Z ✔ own folders, declared inputs and root files (0.577517ms)
2026-10-14T23:46:05.0805942Z ✔ a Cargo.lock change reaches only crates that use what changed (0.603986ms)
2026-10-14T23:46:05.0805985Z ✔ a package-lock change reaches through workspace links (0.477367ms)
2026-10-14T23:46:05.0806029Z ✔ decide: changed units deploy, others wait, unknown ones deploy (0.334762ms)
2026-10-14T23:46:05.0806076Z ✔ decide: --force deploys unchanged units; a commit missing from history deploys (0.150776ms)
2026-10-14T23:46:05.0806123Z ✔ decide: Cargo.lock counts only where it reaches (0.749625ms)
2026-10-14T23:46:05.0806542Z ✔ decide: the runner's image rebuilds only when what it is built from changed (0.189464ms)
2026-10-14T23:46:05.0806612Z ✔ the plan as data: migrations, and each stage's units in jobs that share a build (1.033451ms)
2026-10-14T23:46:05.0809965Z ✔ units are picked by short name, folder or Worker name (0.367902ms)
2026-10-14T23:46:05.0810074Z ✔ a CI job installs only what its units need (0.873581ms)
2026-10-14T23:46:05.0810149Z ✔ a deploy is annotated with its commit, and read back (0.221742ms)
2026-10-14T23:46:05.0810222Z ✔ the live commit: the live version's, looking through secret changes (0.457286ms)
2026-10-14T23:46:05.0810288Z ✔ Wrangler's output: pending migrations and the version a deploy made (0.376035ms)
2026-10-14T23:46:05.0810347Z ✔ the API's answers: the live commit as Wrangler's would give it (1.066451ms)
2026-10-14T23:46:05.5700695Z ✔ the API's answers: a Worker never deployed, and a refusal, never throw (503.023613ms)
2026-10-14T23:46:05.5710802Z ✔ the API is used only with the token Wrangler would be given (0.630676ms)
2026-10-14T23:46:05.5711100Z ✔ pending migrations: the folder's files less the names in d1_migrations (2.05893ms)
2026-10-14T23:46:05.6439085Z ✔ the pool runs everything, no more than its limit at once (15.981662ms)
2026-10-14T23:46:05.6439283Z ✔ self-hosting builds every Rust service the manifest says it runs (0.791388ms)
2026-10-14T23:46:05.6439368Z ✔ the self-hosting architecture page names every unit (0.320021ms)
2026-10-14T23:46:05.6439487Z ✔ the architecture's services page names every unit, with the services it binds to (5.581138ms)
2026-10-14T23:46:05.6439571Z ✔ resolveStack works on a manifest with no workspace crates or packages (4.335378ms)
2026-10-14T23:46:05.6439672Z ✔ decide: a commit older than what runs is never deployed by accident, even forced; --rollback means it (0.259179ms)
2026-10-14T23:46:05.6439742Z ✔ a deploy by hand reports to the repository on g1t, and a workflow's does not (2.044289ms)
2026-10-14T23:46:05.6439823Z ✔ a failed wrangler command is reported by its error, not its trace (0.314171ms)
2026-10-14T23:46:05.6439894Z ✔ Cloudflare failing is tried again; a mistake in what is deployed is not (0.489535ms)
2026-10-14T23:46:05.6439981Z ✔ sandboxes roll over at once when their image or container settings changed, and not otherwise (0.304597ms)
2026-10-14T23:46:05.6440048Z ✔ the deploy tool itself parses: a test that never imports it would not notice (36.298271ms)
2026-10-14T23:46:06.1508600Z ✔ the statements are all there (1.334663ms)
2026-10-14T23:46:06.1508727Z ✔ twenty invites each: the twenty-first is refused in the statement that writes (50.768663ms)
2026-10-14T23:46:06.1508824Z ✔ revoking an unused invite gives it back; an expired one never counted (82.38827ms)
2026-10-14T23:46:06.1508904Z ✔ a used invite is spent: revoking it does nothing and it still counts (46.136019ms)
2026-10-14T23:46:06.1508957Z ✔ a pending invite for the same address is found; a revoked one is not (48.908881ms)
2026-10-14T23:46:06.1509008Z ✔ staff grants add to the twenty and can take some back (44.368195ms)
2026-10-14T23:46:06.1509055Z ✔ signing up from the link spends the invite once and records who invited whom (55.048608ms)
2026-10-14T23:46:06.1509106Z ✔ a body that broke off is worth another try, a lockfile out of step is not (1.687464ms)
2026-10-14T23:46:06.1509180Z ✔ an install that ends without saying why, or stalls, is tried again (0.255013ms)
2026-10-14T23:46:06.1509260Z ✔ a dropped connection is tried again until the install passes (1.222705ms)
2026-10-14T23:46:06.1509274Z ✔ a real error fails at once (0.236726ms)
2026-10-14T23:46:06.1509319Z ✔ it gives up after its tries, with npm's exit code (0.348222ms)
2026-10-14T23:46:06.1509355Z ✔ a stalled install is run again (0.283866ms)
2026-10-14T23:46:06.2907524Z ✔ webhooks: the hourly purge deletes old deliveries by time (1.932701ms)
2026-10-14T23:46:06.2907909Z ✔ billing: this month's users are read from an index, not the ledger (58.2604ms)
2026-10-14T23:46:06.2907996Z ✔ events: a repository's events of one type, newest first, page by page (4.980256ms)
2026-10-14T23:46:06.2908269Z ✔ actions: a self-hosted runner's poll finds queued jobs by namespace, whatever its case (18.560252ms)
2026-10-14T23:46:06.2911963Z ✔ chat: a channel's messages and a thread's replies, newest first, page by page (3.880485ms)
2026-10-14T23:46:06.2928130Z ✔ chat: the sidebar's unread messages are read from each channel's index, after the last read (3.216289ms)
2026-10-14T23:46:06.2928304Z ✔ chat: a page's reactions are read by message, and a workspace's emoji by name (3.262027ms)
2026-10-14T23:46:06.4144395Z ✔ the runner's layer is the binary alone, at its path and mode, owned by root (5.14304ms)
2026-10-14T23:46:06.4144581Z ✔ the layer and entrypoint are what services/runner/Dockerfile builds (0.526991ms)
2026-10-14T23:46:06.4153441Z ✔ the config is the base's, with the layer, the entrypoint and no inherited command (0.989736ms)
2026-10-14T23:46:06.4183995Z ✔ the manifest names the base's layers, then the binary's, in the base's format (0.355414ms)
2026-10-14T23:46:06.4184171Z ✔ image references and bearer challenges are read (0.711919ms)
2026-10-14T23:46:06.4184291Z ✔ the runner's image is made in the registry from the base's manifest and one new layer, pulling none of the base (29.767686ms)
2026-10-14T23:46:06.4184372Z ✔ a base that is not where it should be, or not what base.json says, stops it (1.446893ms)
2026-10-14T23:46:06.4184471Z ✔ a registry that asks for a bearer token is given the one its realm trades the credentials for (2.3518ms)
2026-10-14T23:46:06.4867213Z scheduler: g1t-webhooks (* * * * *) is still running from the last time; skipped
2026-10-14T23:46:06.5151804Z scheduler: g1t-webhooks (* * * * *): 200 {"outcome":"exception"}
2026-10-14T23:46:06.5198047Z ✔ fields read numbers, ranges, lists and steps (1.706973ms)
2026-10-14T23:46:06.5202780Z ✔ the services' crons match when hosted g1t's would fire (1.787403ms)
2026-10-14T23:46:06.5214211Z ✔ what is due is each matching cron of each service (0.428083ms)
2026-10-14T23:46:06.5217400Z ✔ a run asks Wrangler for the handler, and a slow one is not doubled (29.476159ms)
2026-10-14T23:46:06.6268507Z ✔ a deploy is announced to status.g1t.sh with the token, and without one nothing is sent (33.057906ms)
2026-10-14T23:46:06.6273898Z ✔ an announcement that fails is a warning, never a failed deploy (0.723636ms)
2026-10-14T23:46:06.6284551Z ✔ the stages run inside the window: started before, finished after, even when they throw; a dry run says nothing (0.919069ms)
2026-10-14T23:46:06.6289104Z ✔ deploy.mjs announces every deploy, and the workflow passes it the token (0.685739ms)
2026-10-14T23:46:06.6405293Z ℹ tests 92
2026-10-14T23:46:06.6405346Z ℹ suites 0
2026-10-14T23:46:06.6405362Z ℹ pass 91
2026-10-14T23:46:06.6405375Z ℹ fail 0
2026-10-14T23:46:06.6405387Z ℹ cancelled 0
2026-10-14T23:46:06.6419644Z ℹ skipped 1
2026-10-14T23:46:06.6419690Z ℹ todo 0
2026-10-14T23:46:06.6419707Z ℹ duration_ms 5062.443603
